package cn.wolfcode.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.concurrent.ConcurrentHashMap;

@Setter
@Getter
@ServerEndpoint("/{token}")//类似与我们的RequestMapping的作用
@Component
//添加websocket处理器
/**
 * 这个服务端类就是用来与客户端进行通信的；只不过我们可以使用map<token,this></>保存该服务实例的信息，进而获取Session，进而可以获取标识的客户端
 */
public class WebSocketServer {
    private Session session;//客户端和服务端会话的信息
    public static ConcurrentHashMap<String,WebSocketServer> clients = new ConcurrentHashMap<>();//token为key,保存websocket服务器实例
    @OnOpen
    public void onOpen(Session session, @PathParam( "token") String token){//@PathParam:restful格式从路径中取值
        System.out.println("客户端连接===>"+token);
        this.session = session;
        clients.put(token,this);//保存这个服务端，可以获取会话；也就是可以获取客户端会话信息
    }
    //用来接收客户端发送的数据
//    @OnMessage
//    public void onMessage(String msg){
//        System.out.println(".....");
//        System.out.println(msg);
//        System.out.println(clients.size());
//    }
    @OnClose
    public void onClose(@PathParam( "token") String token){
        clients.remove(token);
    }
    @OnError
    public void onError(Throwable error) {
        error.printStackTrace();
    }
}